<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>


    /*
    for-await-of 循环会利用这个函数执行异步迭代操作。循环时，它们会调用以 Symbol.asyncIterator 为键的函数，并期望这个函数会返回一个实现迭代器 API 的对象
    注意 Symbol.asyncIterator 是 ES2018 规范定义的，因此只有版本非常新的浏览器 支持它。
     */
    // unknown:  不太懂
    class Foo {
        async* [Symbol.asyncIterator]() {
        }
    }

    let f = new Foo();
    console.log(f[Symbol.asyncIterator]());


    class Emitter {
        constructor(max) {
            this.max = max;
            this.asyncIdx = 0;
        }

        async* [Symbol.asyncIterator]() {
            while (this.asyncIdx < this.max) {
                yield new Promise((resolve) => resolve(this.asyncIdx++));
            }
        }
    }

    async function asyncCount() {
        let emitter = new Emitter(5);
        for await(const x of emitter) {
            console.log(x);
        }
    }

    asyncCount();

</script>
</body>
</html>